#######################
#
#  Licensed to the Apache Software Foundation (ASF) under one or more contributor license
#  agreements.  See the NOTICE file distributed with this work for additional information regarding
#  copyright ownership.  The ASF licenses this file to you under the Apache License, Version 2.0
#  (the "License"); you may not use this file except in compliance with the License.  You may obtain
#  a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software distributed under the License
#  is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
#  or implied. See the License for the specific language governing permissions and limitations under
#  the License.
#
#######################

set(TSUTIL_PUBLIC_HEADERS
    ${PROJECT_SOURCE_DIR}/include/tsutil/Assert.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/Metrics.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/SourceLocation.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/DbgCtl.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/ts_bw_format.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/ts_diag_levels.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/ts_errata.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/Bravo.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/Convert.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/DenseThreadId.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/Histogram.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/LocalBuffer.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/PostScript.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/Strerror.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/StringConvert.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/Regex.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/TsSharedMutex.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/YamlCfg.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/ts_ip.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/ts_meta.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/ts_time_parser.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/ts_unit_parser.h
    ${PROJECT_SOURCE_DIR}/include/tsutil/ts_errata.h
)
add_library(
  tsutil
  Assert.cc
  Metrics.cc
  DbgCtl.cc
  SourceLocation.cc
  ts_diags.cc
  ts_ip.cc
  YamlCfg.cc
  ts_unit_parser.cc
  Regex.cc
  ts_errata.cc
)

add_library(ts::tsutil ALIAS tsutil)
set_target_properties(tsutil PROPERTIES POSITION_INDEPENDENT_CODE TRUE PUBLIC_HEADER "${TSUTIL_PUBLIC_HEADERS}")
target_link_libraries(tsutil PUBLIC libswoc::libswoc yaml-cpp::yaml-cpp PkgConfig::PCRE2)

if(BUILD_SHARED_LIBS)
  install(
    TARGETS tsutil
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tsutil
  )
else()
  install(FILES ${TSUTIL_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tsutil)
endif()

if(BUILD_TESTING)
  add_executable(
    test_tsutil
    unit_tests/test_Bravo.cc
    unit_tests/test_LocalBuffer.cc
    unit_tests/test_Metrics.cc
    unit_tests/test_PostScript.cc
    unit_tests/test_Strerror.cc
    unit_tests/test_StringConvert.cc
    unit_tests/test_Regex.cc
    unit_tests/test_ts_meta.cc
    unit_tests/test_time_parser.cc
    unit_tests/unit_test_main.cc
  )

  target_link_libraries(test_tsutil PRIVATE tsutil catch2::catch2)

  add_test(NAME test_tsutil COMMAND $<TARGET_FILE:test_tsutil>)
endif()

clang_tidy_check(tsutil)
